/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.modelo;

import br.com.foxinline.util.Caracter;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.*;

/**
 *
 * @author laverson
 */
@Entity
public class Projeto implements Serializable {

    @Id
    @SequenceGenerator(sequenceName = "seq_projeto", name = "seq_projeto", allocationSize = 1)
    @GeneratedValue(generator = "seq_projeto", strategy = GenerationType.SEQUENCE)
    private Long id;
    private String descricao;
    private String nome;
    @Temporal(TemporalType.DATE)
    private Date dataEntrada;
    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "projeto_id")
    private List<Situacao> situacoes;
    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "projeto_id")
    private List<Lancamento> lancamentos;
    @OneToOne
    private Usuario usuario;
    @OneToOne
    private Secretaria secretaria;
    private BigDecimal orcado;
    private Integer numeroProtocolo;
    @OneToOne
    private Usuario responsavel;
    
    @ManyToMany(fetch= FetchType.EAGER)
    private List<Usuario> acompanhantes;
    
    @Temporal(TemporalType.DATE)
    private Date prazo;
    private String gestor;
    private BigDecimal contraPartida;
    @Temporal(TemporalType.DATE)
    private Date vigenciaInicial;
    @Temporal(TemporalType.DATE)
    private Date vigenciaFinal;
    @Temporal(TemporalType.DATE)
    private Date vigenciaConvenio;
    @OneToOne
    private Pessoa empresa;
    @Column(length = 14)
    private String cnpj;
    private String responsavelEmpresa;
    private BigDecimal repasse;
    @OneToMany(cascade = CascadeType.ALL)
    private List<Anexo> anexos;
    private Integer estagio;
    private String linhaFinanciamento;
    @Temporal(TemporalType.DATE)
    private Date dataAssinatura;
    @Version
    private int versao;
    @OneToOne(cascade= CascadeType.ALL)
    private Endereco endereco;

    public List<Usuario> getAcompanhantes() {
        return acompanhantes;
    }

    public void setAcompanhantes(List<Usuario> acompanhantes) {
        this.acompanhantes = acompanhantes;
    }
    

    public Projeto() {
    }

    public Endereco getEndereco() {
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Date getDataEntrada() {
        return dataEntrada;
    }

    public void setDataEntrada(Date dataEntrada) {
        this.dataEntrada = dataEntrada;
    }

    public List<Situacao> getSituacoes() {
        return situacoes;
    }

    public void setSituacoes(List<Situacao> situacoes) {
        this.situacoes = situacoes;
    }

    public List<Lancamento> getLancamentos() {
        return lancamentos;
    }

    public void setLancamentos(List<Lancamento> lancamentos) {
        this.lancamentos = lancamentos;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public Integer getNumeroProtocolo() {
        return numeroProtocolo;
    }

    public void setNumeroProtocolo(Integer numeroProtocolo) {
        this.numeroProtocolo = numeroProtocolo;
    }

    public BigDecimal getOrcado() {
        return orcado;
    }

    public void setOrcado(BigDecimal orcado) {
        this.orcado = orcado;
    }

    public Secretaria getSecretaria() {
        return secretaria;
    }

    public void setSecretaria(Secretaria secretaria) {
        this.secretaria = secretaria;
    }

    public Usuario getResponsavel() {
        return responsavel;
    }

    public void setResponsavel(Usuario responsavel) {
        this.responsavel = responsavel;
    }

    public Date getPrazo() {
        return prazo;
    }

    public void setPrazo(Date prazo) {
        this.prazo = prazo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public BigDecimal getContraPartida() {
        return contraPartida;
    }

    public void setContraPartida(BigDecimal contraPartida) {
        this.contraPartida = contraPartida;
    }

    public Date getVigenciaConvenio() {
        return vigenciaConvenio;
    }

    public void setVigenciaConvenio(Date vigenciaConvenio) {
        this.vigenciaConvenio = vigenciaConvenio;
    }

    public Date getVigenciaFinal() {
        return vigenciaFinal;
    }

    public void setVigenciaFinal(Date vigenciaFinal) {
        this.vigenciaFinal = vigenciaFinal;
    }

    public Date getVigenciaInicial() {
        return vigenciaInicial;
    }

    public void setVigenciaInicial(Date vigenciaInicial) {
        this.vigenciaInicial = vigenciaInicial;
    }

    public String getGestor() {
        return gestor;
    }

    public void setGestor(String gestor) {
        this.gestor = gestor;
    }

    public String getCnpj() {
        return cnpj;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = Caracter.removecaracter(cnpj);
    }

    public Pessoa getEmpresa() {
        return empresa;
    }

    public void setEmpresa(Pessoa empresa) {
        this.empresa = empresa;
    }

    
    public BigDecimal getRepasse() {
        return repasse;
    }

    public void setRepasse(BigDecimal repasse) {
        this.repasse = repasse;
    }

    public String getResponsavelEmpresa() {
        return responsavelEmpresa;
    }

    public void setResponsavelEmpresa(String responsavelEmpresa) {
        this.responsavelEmpresa = responsavelEmpresa;
    }

    public List<Anexo> getAnexos() {
        return anexos;
    }

    public void setAnexos(List<Anexo> anexos) {
        this.anexos = anexos;
    }

    public Date getDataAssinatura() {
        return dataAssinatura;
    }

    public void setDataAssinatura(Date dataAssinatura) {
        this.dataAssinatura = dataAssinatura;
    }

    public Integer getEstagio() {
        return estagio;
    }

    public void setEstagio(Integer estagio) {
        this.estagio = estagio;
    }

    public String getLinhaFinanciamento() {
        return linhaFinanciamento;
    }

    public void setLinhaFinanciamento(String linhaFinanciamento) {
        this.linhaFinanciamento = linhaFinanciamento;
    }

    public int getVersao() {
        return versao;
    }

    public void setVersao(int versao) {
        this.versao = versao;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Projeto other = (Projeto) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        if ((this.descricao == null) ? (other.descricao != null) : !this.descricao.equals(other.descricao)) {
            return false;
        }
        if ((this.nome == null) ? (other.nome != null) : !this.nome.equals(other.nome)) {
            return false;
        }
        if (this.dataEntrada != other.dataEntrada && (this.dataEntrada == null || !this.dataEntrada.equals(other.dataEntrada))) {
            return false;
        }
        if (this.situacoes != other.situacoes && (this.situacoes == null || !this.situacoes.equals(other.situacoes))) {
            return false;
        }
        if (this.lancamentos != other.lancamentos && (this.lancamentos == null || !this.lancamentos.equals(other.lancamentos))) {
            return false;
        }
        if (this.usuario != other.usuario && (this.usuario == null || !this.usuario.equals(other.usuario))) {
            return false;
        }
        if (this.secretaria != other.secretaria && (this.secretaria == null || !this.secretaria.equals(other.secretaria))) {
            return false;
        }
        if (this.orcado != other.orcado && (this.orcado == null || !this.orcado.equals(other.orcado))) {
            return false;
        }
        if (this.numeroProtocolo != other.numeroProtocolo && (this.numeroProtocolo == null || !this.numeroProtocolo.equals(other.numeroProtocolo))) {
            return false;
        }
        if ((this.responsavel == null) ? (other.responsavel != null) : !this.responsavel.equals(other.responsavel)) {
            return false;
        }
        if (this.prazo != other.prazo && (this.prazo == null || !this.prazo.equals(other.prazo))) {
            return false;
        }
        if ((this.gestor == null) ? (other.gestor != null) : !this.gestor.equals(other.gestor)) {
            return false;
        }
        if (this.contraPartida != other.contraPartida && (this.contraPartida == null || !this.contraPartida.equals(other.contraPartida))) {
            return false;
        }
        if (this.vigenciaInicial != other.vigenciaInicial && (this.vigenciaInicial == null || !this.vigenciaInicial.equals(other.vigenciaInicial))) {
            return false;
        }
        if (this.vigenciaFinal != other.vigenciaFinal && (this.vigenciaFinal == null || !this.vigenciaFinal.equals(other.vigenciaFinal))) {
            return false;
        }
        if (this.vigenciaConvenio != other.vigenciaConvenio && (this.vigenciaConvenio == null || !this.vigenciaConvenio.equals(other.vigenciaConvenio))) {
            return false;
        }
        if ((this.empresa == null) ? (other.empresa != null) : !this.empresa.equals(other.empresa)) {
            return false;
        }
        if ((this.cnpj == null) ? (other.cnpj != null) : !this.cnpj.equals(other.cnpj)) {
            return false;
        }
        if ((this.responsavelEmpresa == null) ? (other.responsavelEmpresa != null) : !this.responsavelEmpresa.equals(other.responsavelEmpresa)) {
            return false;
        }
        if (this.repasse != other.repasse && (this.repasse == null || !this.repasse.equals(other.repasse))) {
            return false;
        }
        if (this.anexos != other.anexos && (this.anexos == null || !this.anexos.equals(other.anexos))) {
            return false;
        }
        if (this.estagio != other.estagio && (this.estagio == null || !this.estagio.equals(other.estagio))) {
            return false;
        }
        if ((this.linhaFinanciamento == null) ? (other.linhaFinanciamento != null) : !this.linhaFinanciamento.equals(other.linhaFinanciamento)) {
            return false;
        }
        if (this.dataAssinatura != other.dataAssinatura && (this.dataAssinatura == null || !this.dataAssinatura.equals(other.dataAssinatura))) {
            return false;
        }
        if (this.versao != other.versao) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 17 * hash + (this.id != null ? this.id.hashCode() : 0);
        hash = 17 * hash + (this.descricao != null ? this.descricao.hashCode() : 0);
        hash = 17 * hash + (this.nome != null ? this.nome.hashCode() : 0);
        hash = 17 * hash + (this.dataEntrada != null ? this.dataEntrada.hashCode() : 0);
        hash = 17 * hash + (this.situacoes != null ? this.situacoes.hashCode() : 0);
        hash = 17 * hash + (this.lancamentos != null ? this.lancamentos.hashCode() : 0);
        hash = 17 * hash + (this.usuario != null ? this.usuario.hashCode() : 0);
        hash = 17 * hash + (this.secretaria != null ? this.secretaria.hashCode() : 0);
        hash = 17 * hash + (this.orcado != null ? this.orcado.hashCode() : 0);
        hash = 17 * hash + (this.numeroProtocolo != null ? this.numeroProtocolo.hashCode() : 0);
        hash = 17 * hash + (this.responsavel != null ? this.responsavel.hashCode() : 0);
        hash = 17 * hash + (this.prazo != null ? this.prazo.hashCode() : 0);
        hash = 17 * hash + (this.gestor != null ? this.gestor.hashCode() : 0);
        hash = 17 * hash + (this.contraPartida != null ? this.contraPartida.hashCode() : 0);
        hash = 17 * hash + (this.vigenciaInicial != null ? this.vigenciaInicial.hashCode() : 0);
        hash = 17 * hash + (this.vigenciaFinal != null ? this.vigenciaFinal.hashCode() : 0);
        hash = 17 * hash + (this.vigenciaConvenio != null ? this.vigenciaConvenio.hashCode() : 0);
        hash = 17 * hash + (this.empresa != null ? this.empresa.hashCode() : 0);
        hash = 17 * hash + (this.cnpj != null ? this.cnpj.hashCode() : 0);
        hash = 17 * hash + (this.responsavelEmpresa != null ? this.responsavelEmpresa.hashCode() : 0);
        hash = 17 * hash + (this.repasse != null ? this.repasse.hashCode() : 0);
        hash = 17 * hash + (this.anexos != null ? this.anexos.hashCode() : 0);
        hash = 17 * hash + (this.estagio != null ? this.estagio.hashCode() : 0);
        hash = 17 * hash + (this.linhaFinanciamento != null ? this.linhaFinanciamento.hashCode() : 0);
        hash = 17 * hash + (this.dataAssinatura != null ? this.dataAssinatura.hashCode() : 0);
        hash = 17 * hash + this.versao;
        return hash;
    }

    @Override
    public String toString() {
        return "Projeto{" + "id=" + id + ", descricao=" + descricao + ", nome=" + nome + ", dataEntrada=" + dataEntrada + ", usuario=" + usuario + ", secretaria=" + secretaria + ", orcado=" + orcado + ", numeroProtocolo=" + numeroProtocolo + ", responsavel=" + responsavel + ", prazo=" + prazo + ", gestor=" + gestor + ", contraPartida=" + contraPartida + ", vigenciaInicial=" + vigenciaInicial + ", vigenciaFinal=" + vigenciaFinal + ", vigenciaConvenio=" + vigenciaConvenio + ", empresa=" + empresa + ", cnpj=" + cnpj + ", responsavelEmpresa=" + responsavelEmpresa + ", repasse=" + repasse + ", anexos=" + anexos + ", estagio=" + estagio + ", linhaFinanciamento=" + linhaFinanciamento + ", dataAssinatura=" + dataAssinatura + '}';
    }
}
